home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree.pl
Perl Script  |  2006-05-12  |  7KB  |  189 lines

  1. #!/usr/bin/perl
  2. #
  3. # Coded by Loni - loni@securityforest.com
  4. # Updated:  12/02/2005
  5. #
  6. # Client Utility for the ExploitTree CVS Repository on SecurityForest.com
  7.  
  8. $ver = "v0.6";
  9. $name = "ExploitTree.pl";
  10.  
  11. $winexe = "no"; #Only applicable when distributed as an exe with binary unix utilities
  12. if ($winexe eq "yes") { 
  13.     $name = "ExploitTree.exe"; 
  14.     $dir = $0; $dir =~ s/\\$name//;
  15.     $ENV{'PATH'} = "$dir\\bin;$ENV{'PATH'}";
  16. }
  17.  
  18. if ($#ARGV < 0) { &usage(); } $username = @ARGV[0]; 
  19.  
  20. sub usage {
  21.     print "ExploitTree $ver\nCoded by Loni - loni\@securityforest.com\nhttp:\/\/www.SecurityForest.com\n\n";
  22.     print "Normal Usage:\n";
  23.     print " - Run this tool from the directory that already or will contain\n";
  24.     print "   the directory ExploitTree.\n";
  25.     print " - To download the repository run \"$name anonymous\" (blank password).\n\n";
  26.     print "ExploitTree Administrators and Contributers Usage:\n";
  27.     print " - To log in to the repository run \"$name <your_nick>\", enter your\n";
  28.     print "   password when prompted.\n";
  29.     print " - When updating the repository, close the default editor\n";
  30.      print "   and then c\<enter\> to continue when prompted.\n";
  31.      print "   eg. vi:      type \:q\<enter\>\n";
  32.      print "   eg. nano:    type \<ctrl\>x\n";
  33.      print "   eg. notepad: type \<alt\>f,x\n\n"; 
  34.     exit(1); 
  35. }
  36.  
  37. $server = "cvs.securityforest.com"; $rep = "\/home/security/cvsroot";
  38.  
  39. $loggedin = 0;
  40. $refreshbranches = 1;
  41. &master();
  42.  
  43.  
  44. sub master {
  45.     if ($username eq "anonymous") {
  46.         print "\nExploitTree Client Utility Manager $ver\n----------------------------------------\n\n";
  47.         print "1\) Initialize (first time download)\n"; 
  48.         print "2\) Update Repository\n";
  49.         print "3\) Print Exploit Statistics\n";
  50.         print "q\) Quit\n\n> ";
  51.         chomp($choice = <STDIN>);
  52.         if ($choice == 1) { &login($username); &initial_download(); }
  53.         if ($choice == 2) { &version(); &login($username); &update_local(); }
  54.         if ($choice == 3) { &version(); &stats(); print "\nHit Enter to continue>"; <STDIN>; &master(); }
  55.         elsif ($ch_list == "q") { print "Quiting...\n"; exit(1); } 
  56.     } else {
  57.         print "\nExploitTree Client Utility Admin Manager $ver\n----------------------------------------\n\n";
  58.         print "1\) Initialize (first time download)\n"; 
  59.         print "2\) Update Local Copy\n"; 
  60.         print "3\) Update Repository - Upload files from one local branch\n"; 
  61.         print "4\) Update Repository - Add & upload ALL new branches from\n";
  62.         print "                       local copy\n"; 
  63.         print "5\) Update Repository - Add & upload ALL new branches\/files from\n";
  64.         print "                       local copy *recursivly* (ie. slow)\n"; 
  65.         print "6\) Print Exploit Statistics\n";
  66.         print "+---------------------------------------\nq\) Quit\n\n> ";
  67.         chomp($choice = <STDIN>);
  68.         if ($choice == 1) { &login($username); &initial_download();}
  69.         if ($choice == 2) { &version(); &login($username); &update_local(); &master();}
  70.         if ($choice == 3) { &version(); &login($username); &branches(); &update_repos_one(); &master();}
  71.         if ($choice == 4) { &version(); &login($username); &new_branches(); &branches(); &update_repos_one(); &commit(); &master();}
  72.         if ($choice == 5) { &version(); &login($username); &new_branches(); &branches(); &update_repos_all(); &commit(); &master();}
  73.         if ($choice == 6) { &version(); &stats(); print "\nHit Enter to continue>"; <STDIN>; &master(); }
  74.         elsif ($ch_list == "q") { print "Quiting...\n"; exit(1); }    
  75.     }
  76. }
  77.  
  78. sub version {
  79.     @latest_ver = &readfile("ExploitTree\/_Ver");
  80.     chomp($latest_ver[0]); chop($latest_ver[0]);
  81.     if ($latest_ver[0] ne $ver) {
  82.         print "Please use $name $latest_ver[0] - Available at SecurityForest.com\n";
  83.         print "http:\/\/www.securityforest.com\/downloads\/ExploitTree-pl.tar.gz or ExploitTree-Win32.zip";
  84.         exit(1);
  85.     }
  86. }
  87.  
  88. sub branches {
  89.     if ($refreshbranches == 1) {
  90.         undef(@branches);
  91.         system("cd ExploitTree && ls -R * |grep : |grep -v CVS > ../branches.txt && cd ..");
  92.         @branches_tmp = &readfile("branches.txt");
  93.         foreach $branch_tmp (@branches_tmp) { 
  94.             chomp($branch_tmp);
  95.             if ($winexe eq "yes") { $branch_tmp=~s/=://; } else { $branch_tmp=~s/://; }
  96.             push(@branches,$branch_tmp);
  97.         }
  98.         $refreshbranches == 0;
  99.     }    
  100. }
  101.  
  102. sub new_branches {
  103.     $refreshbranches = 1;
  104.     undef(@branches2);
  105.     system("cd ExploitTree && ls -R * > ../branches2.txt && cd ..");
  106.     @branches_tmp2 = &readfile("branches2.txt");
  107.     $bdots=0;
  108.     $branch_has_SF="no";
  109.     foreach $branch_tmp2 (@branches_tmp2) { 
  110.         chomp($branch_tmp2);
  111.         if ($branch_tmp2=~/:/) { if ($bdots == 0) { $branch_tmp3 = $branch_tmp2; } $bdots++; }
  112.         if ($branch_tmp2=~/_SecurityForest/) { $branch_has_SF="yes"; }
  113.         if ($bdots == 1 && $branch_has_SF eq "yes" ) { $bdots=0; $branch_has_SF="no"; }
  114.         else { 
  115.             if ($bdots == 2) { if ($branch_tmp3!~/CVS/) {    
  116.                 if ($winexe eq "yes") { $branch_tmp3=~s/=://; } else { $branch_tmp3=~s/://; }
  117.                 push(@branches2,$branch_tmp3); 
  118.             } 
  119.             $branch_tmp3 = $branch_tmp2; $bdots=1; 
  120.             } 
  121.         }
  122.     }
  123.     $branch_num2 = 0;
  124.     for $branch_num2 (0..$#branches2) { &addbranch($branch_num2); }
  125. }
  126.  
  127. sub readfile {        #read in a files contents
  128.     undef @readfile_contents;
  129.     my ($readfile) =  @_;
  130.     open READFILE, $readfile or die "Cannot open $readfile for read :$!\n";
  131.     while (<READFILE>) { push (@readfile_contents, $_); } 
  132.     close READFILE;
  133.     return(@readfile_contents);
  134. }
  135.  
  136. sub login {
  137.     my ($username) = @_;
  138.     if ($username eq "anonymous") { print "Password is blank (press enter), then wait...\n\n"; }
  139.     $cvsconnect = "cvs -d:pserver:$username\@$server:$rep";
  140.     if ($loggedin == 0) { system("$cvsconnect login"); $loggedin = 1; }    
  141. }
  142.  
  143. sub initial_download { system("$cvsconnect -z5 co ExploitTree"); }
  144.  
  145. sub update_local { system("cd ExploitTree && $cvsconnect update -dP && cd .."); } 
  146. # -d (build directories if new directories have been added to the repository since your 
  147. # checkout or last update) and -P (leave empty directories out of your working copy)
  148.  
  149. sub update_repos_one() {
  150.     $branch_num = "0";
  151.     print "\nChoose a branch to update\n-----------------------------\n";
  152.     foreach $branch (@branches) { print "$branch_num\) $branch\n"; $branch_num++; }
  153.     print "\nbranch> ";
  154.     chomp($branch_choice = <STDIN>);
  155.     &update($branch_choice);
  156. }
  157.  
  158. sub update_repos_all {
  159.     $branch_num = 0;
  160.     for $branch_num (0..$#branches) { &update($branch_num); }
  161. }
  162.  
  163. sub update {
  164.     my ($branch_num) = @_;
  165.     print "Updating @branches[$branch_num]\n";
  166.     system("cd ExploitTree && $cvsconnect add @branches[$branch_num]\/*.* && cd ..");
  167.     system("cd ExploitTree && $cvsconnect commit @branches[$branch_num] && cd ..");
  168. }
  169.  
  170. sub addbranch {
  171.     my ($branch_num) = @_;
  172.     print "Adding @branches2[$branch_num2]\n";
  173.     system("cd ExploitTree && $cvsconnect add @branches2[$branch_num2] && cd ..");
  174.     system("cd ExploitTree && cp _SecurityForest @branches2[$branch_num2] && cd ..");
  175.     system("cd ExploitTree && $cvsconnect add @branches2[$branch_num2]\/_SecurityForest && cd ..");
  176. }
  177.  
  178. sub commit { system("cd ExploitTree && $cvsconnect commit && cd .."); }
  179.  
  180. sub stats {
  181.     print "Please wait while calculating...";
  182.     system("ls -R ExploitTree | grep -v \":\\|CVS\\|Entries\\|Entries.Log\\|Repository\\|Root\\|_SecurityForest\" | grep . | grep -e [*.*] | wc -l > stats.txt");
  183.     @stats = &readfile("stats.txt");
  184.     print "\nTotal Exploits: $stats[0]\n";
  185. }
  186.  
  187. #EOF
  188.  
  189.